import os
import stat
import uuid
from datetime import datetime

from werkzeug.utils import secure_filename

from application import app, db
from web.models.Images import Image


class UploadService():
    @staticmethod
    def uploadByFile(file):
        config_upload = app.config['UPLOAD']
        resp = {'code': 200, 'msg': '操作成功~~', 'data': {}}
        filename = secure_filename(file.filename)  # 全中文是不支持的，这个们在flask讲过
        print(filename, '*' * 20)
        # xx.xx.jpg
        ext = filename.rsplit(".", 1)[1]
        if ext not in config_upload['ext']:
            resp['code'] = -1
            resp['msg'] = "不允许的扩展类型文件"
            return resp
        root_path = app.root_path + config_upload['prefix_path']
        # 不使用getCurrentDate创建目录，为了保证其他写的可以用，这里改掉，服务器上对时间不兼容
        file_dir = datetime.now().strftime("%Y%m%d")
        save_dir = root_path + file_dir
        if not os.path.exists(save_dir):
            os.mkdir(save_dir)
            # 赋予权限
            # stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
            # stat.S_IRGRP: 组用户有读权限0o040
            # stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
            os.chmod(save_dir, stat.S_IRWXU | stat.S_IRGRP | stat.S_IRWXO)
            # UUID: 通用唯一标识符 ( Universally Unique Identifier ),
            # 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址,
            # 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128bit ).
        file_name = str(uuid.uuid4()).replace("-", "") + "." + ext
        file.save("{0}/{1}".format(save_dir, file_name))
        model_image = Image()
        model_image.file_key = file_dir + "/" + file_name  # 保存在数据库中的数据路径时间 / file_name, 每天会创建以时间命名新的文件夹
        model_image.created_time = datetime.now()
        db.session.add(model_image)
        db.session.commit()
        resp['data'] = {
            'file_key': model_image.file_key 
        }
        return resp
